package d8_thread_pool;

import java.util.concurrent.*;

public class ThreadPoolExecutorDemo01 {
    public static void main(String[] args) {
        //目标: 创建线程池对象, 处理Runnable任务
        //1、创建线程池
        /*ThreadPoolExecutor的构造器
        public ThreadPoolExecutor(int corePoolSize,
                                int maximumPoolSize,
                                long keepAiveTime,
                                TimeUnit unit,
                                BlockKingQueue<Runnable> workQueue,
                                ThreadFactory threadFactory,
                                RejectedExecutionHandler handler)
         */
        ExecutorService pool = new ThreadPoolExecutor(
                3,
                5,
                1,
                TimeUnit.MINUTES,
                new ArrayBlockingQueue<>(3),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.CallerRunsPolicy());
        //2、处理任务
        //创建任务
        MyRunnable target = new MyRunnable();
        pool.execute(target); //会 自动创建线程, 并处理此任务
        pool.execute(target); //注意任务是可以重复的,当做是一个新任务
        pool.execute(target);
        pool.execute(target);// ------→
        pool.execute(target);// -------→  这三个是待处理任务
        pool.execute(target);// --------→
        pool.execute(target);//到了临时线程的时机
        pool.execute(target);// 到了临时线程的时机
        pool.execute(target);// 到了任务拒绝的策略了!

        //3、线程池没有死亡
        //注意抛异常之后,是不会再执行到这里的
        // pool.shutdownNow();// 立即关闭, 不管任务是否完成!! 返回没有执行完的任务
//        pool.shutdown();// 等待全部任务执行完毕后, 再关闭
    }
}
